//package com.snail.service;
//
//import com.fasterxml.jackson.databind.JsonNode;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Service;
//import org.springframework.web.reactive.function.client.WebClient;
//
//import java.util.List;
//import java.util.Map;
//
///**
// * @author cici
// * @description ai分析服务
// * @date 2025/8/13 17:08
// */
//@Slf4j
//@Service
//@RequiredArgsConstructor
//public class AIService {
//    private final WebClient.Builder webClientBuilder;
//    private final ObjectMapper objectMapper;
//
//    @Value("${ai.openai.base-url}")
//    private String baseUrl;
//
//    @Value("${ai.openai.api-key}")
//    private String apiKey;
//
//    @Value("${ai.openai.model}")
//    private String model;
//
//    @Value("${ai.openai.max-tokens}")
//    private Integer maxTokens;
//
//    @Value("${ai.openai.temperature}")
//    private Double temperature;
//
//    private WebClient webClient;
//
//    private WebClient getWebClient() {
//        if (webClient == null) {
//            webClient = webClientBuilder
//                    .baseUrl(baseUrl)
//                    .defaultHeader(HttpHeaders.AUTHORIZATION, "Bearer " + apiKey)
//                    .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
//                    .build();
//        }
//        return webClient;
//    }
//
//    /**
//     * 分析搜索查询，提取关键词和语义信息
//     */
//    public String analyzeSearchQuery(String query) {
//        String prompt = String.format("""
//            作为商品搜索专家，请分析以下用户搜索查询，并提供详细的语义分析：
//
//            用户查询："%s"
//
//            请提供JSON格式的分析结果，包含以下信息：
//            {
//                "originalQuery": "原始查询",
//                "intent": "搜索意图描述",
//                "keywords": ["关键词1", "关键词2"],
//                "synonyms": ["同义词1", "同义词2"],
//                "categories": ["可能的商品分类1", "分类2"],
//                "attributes": {
//                    "color": "颜色相关词汇",
//                    "size": "尺寸相关",
//                    "brand": "品牌相关",
//                    "priceRange": "价格范围描述"
//                },
//                "expandedQuery": "扩展后的搜索词汇，包含同义词和相关概念",
//                "searchStrategy": "推荐的搜索策略"
//            }
//
//            请确保分析准确，能够帮助提高搜索相关性。
//            """, query);
//
//        return callOpenAI(prompt);
//    }
//
//    /**
//     * 生成语义相似的搜索词
//     */
//    public String generateSimilarTerms(String query) {
//        String prompt = String.format("""
//            请为以下商品搜索查询生成语义相似的搜索词，帮助提高搜索召回率：
//
//            原始查询："%s"
//
//            请生成JSON格式的结果：
//            {
//                "originalQuery": "%s",
//                "similarTerms": ["相似词1", "相似词2", "相似词3"],
//                "relatedConcepts": ["相关概念1", "相关概念2"],
//                "alternativeDescriptions": ["替代描述1", "替代描述2"],
//                "broadenedTerms": ["更宽泛的词1", "更宽泛的词2"],
//                "narrowedTerms": ["更具体的词1", "更具体的词2"]
//            }
//            """, query, query);
//
//        return callOpenAI(prompt);
//    }
//
//    /**
//     * 分析商品相关性
//     */
//    public String analyzeProductRelevance(String query, String productName, String productDescription) {
//        String prompt = String.format("""
//            请分析以下商品与用户搜索查询的相关性：
//
//            用户查询："%s"
//            商品名称："%s"
//            商品描述："%s"
//
//            请提供JSON格式的分析结果：
//            {
//                "relevanceScore": 0.95,
//                "relevanceExplanation": "相关性解释",
//                "matchingKeywords": ["匹配的关键词"],
//                "semanticMatches": ["语义匹配点"],
//                "recommendationReason": "推荐理由"
//            }
//
//            相关性分数范围：0.0-1.0，1.0表示完全相关。
//            """, query, productName, productDescription);
//
//        return callOpenAI(prompt);
//    }
//
//    /**
//     * 调用OpenAI API
//     */
//    private String callOpenAI(String prompt) {
//        try {
//            Map<String, Object> requestBody = Map.of(
//                    "model", model,
//                    "messages", List.of(
//                            Map.of("role", "user", "content", prompt)
//                    ),
//                    "max_tokens", maxTokens,
//                    "temperature", temperature
//            );
//
//            Mono<String> response = getWebClient()
//                    .post()
//                    .uri("/chat/completions")
//                    .bodyValue(requestBody)
//                    .retrieve()
//                    .bodyToMono(String.class)
//                    .timeout(Duration.ofSeconds(30));
//
//            String result = response.block();
//
//            if (result != null) {
//                JsonNode jsonNode = objectMapper.readTree(result);
//                JsonNode choices = jsonNode.path("choices");
//                if (choices.isArray() && choices.size() > 0) {
//                    return choices.get(0).path("message").path("content").asText();
//                }
//            }
//
//            return "AI分析服务暂时不可用";
//
//        } catch (Exception e) {
//            log.error("调用OpenAI API时发生错误", e);
//            return "AI分析失败: " + e.getMessage();
//        }
//    }
//
//    /**
//     * 优化搜索查询
//     */
//    public String optimizeSearchQuery(String originalQuery, List<String> availableCategories, List<String> availableBrands) {
//        String prompt = String.format("""
//            作为电商搜索优化专家，请优化以下搜索查询以提高搜索效果：
//
//            原始查询："%s"
//            可用分类：%s
//            可用品牌：%s
//
//            请提供优化建议的JSON格式结果：
//            {
//                "optimizedQuery": "优化后的查询词",
//                "suggestedCategories": ["建议的分类"],
//                "suggestedBrands": ["建议的品牌"],
//                "queryExpansions": ["查询扩展词"],
//                "filterSuggestions": {
//                    "priceRange": "建议的价格范围",
//                    "features": ["建议的特性过滤"]
//                },
//                "searchTips": "搜索建议"
//            }
//            """, originalQuery, availableCategories, availableBrands);
//
//        return callOpenAI(prompt);
//    }
//}
